<?php
namespace Peas\Kernel\Helper;

use Peas\Http\Session;
use Peas\Utils\StringUtils;

/**
 * Peas Framework
 *
 * 表单令牌辅助类，需要启用session
 *
 * @author  Hongzan Zhang <zhanghongzan@163.com>
 * @version $Id$
 */
class TokenHelper
{
    /**
     * Session前缀
     *
     * @var string
     */
    private static $prefix = 'PT_';

    /**
     * 默认token名称
     *
     * @var string
     */
    public static $defaultName = 'DefaultToken';


    /**
     * 生成默认token
     *
     * @return string
     */
    public static function autoCreate()
    {
        return self::create(self::$defaultName);
    }

    /**
     * 校验通过autoCreate方法产生的token
     *
     * @return boolean
     */
    public static function autoCheck()
    {
        return self::check(self::$defaultName);
    }


    /**
     * 创建指定名称的token
     *
     * @param  string $name token名称
     * @return string
     */
    public static function create($name)
    {
        $key = StringUtils::random(4);
        $val = StringUtils::random(mt_rand(5, 8));
        Session::set(self::$prefix . $name . $key, $val);
        return $key . $val;
    }

    /**
     * 校验指定名称的token
     *
     * @param  string $name 要校验的token名称
     * @return boolean 校验成功返回true，失败返回false
     */
    public static function check($name)
    {
        $formVal = isset($_REQUEST[$name]) ? $_REQUEST[$name] : '';
        if (empty($formVal)) {
            return false;
        }
        $sessionKey = self::$prefix . $name . substr($formVal, 0, 4);
        $sessionVal = Session::get($sessionKey);
        Session::remove($sessionKey);
        return ($sessionVal == null || $sessionVal != substr($formVal, 4)) ? false : true;
    }
}
